/*
 *https://www.luogu.com.cn/problem/P1141
 *洛谷P1141. 01迷宫
 *medium 吴朝泽 2024.12.3
 *BFS广度优先搜索
*/

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1010;
int n, m, color, cnt = 0;    //color 表示矩阵中存在的连通区域并赋予编号
int xx[] = { 0, 1, -1, 0 };
int yy[] = { -1, 0, 0, 1 };
bool mp[Maxn][Maxn];
int vis[Maxn][Maxn];
int ans[1000010];

void BFS(int x, int y)
{
	queue<int> h;
	queue<int> l;
	h.push(x);
	l.push(y);
	vis[x][y] = color;
	while (!h.empty())
	{
		for (int i = 0; i < 4; ++i)
		{
			int dx = h.front() + xx[i];
			int dy = l.front() + yy[i];
			if (dx >= 1 && dx <= n && dy >= 1 && dy <= n && vis[dx][dy] == 0 && mp[dx][dy] != mp[h.front()][l.front()])
			{
                //注意判断当前点与下一个点是否不相等，即 0 只能走到 1
				h.push(dx);
				l.push(dy);
				vis[dx][dy] = color;
			}
		}
		h.pop();
		l.pop();
		cnt++;   //统计该连通区域的大小，即答案
	}
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
		{
            //注意 mp 数组时 bool 类型，不能直接 cin >> mp[i][j]
			char x; 
            cin >> x;
            if(x == '1')
                mp[i][j] = 1;
            else
                mp[i][j] = 0;

		}
	}
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
		{
			if (!vis[i][j])   //当访问一个从未访问过的格子表示进入了一片新的连通区域
			{
				color++;     //这时 color 应该自增，表示出现了一块新的连通区域，并在这块区域进行 bfs 搜索
				BFS(i, j);
				ans[color] = cnt;
				cnt = 0;
			}
		}
	}
	for (int i = 1; i <= m; ++i)
	{
		int a, b;
		cin >> a >> b;
		cout << ans[vis[a][b]] << endl;
	}
	return 0;
}